package com.ww.java.generic.method.erase;

import java.lang.reflect.Array;
import java.util.Arrays;

public class ArrayMaker<T> {

	/**
	 * kind被存储Class<T>，擦除也意味着实际将被存储位Class，没有任何参数。
	 * 因此，当你在使用它时，例如在创建数组时，Array.newInstance()实际上并未
	 * 拥有kind所蕴含的类型信息。
	 */
	private Class<T> kind;
	
	public ArrayMaker(Class<T> kind) {
		this.kind = kind;
	}
	
	@SuppressWarnings("unchecked")
	T[] create(int size) {
		/**
		 * 在泛型中创建数组，使用Array.newInstance()是推荐的方式！！！
		 */
		return (T[])Array.newInstance(kind, size);
	}
	
	public static void main(String[] args) {
		ArrayMaker<String> maker = new ArrayMaker<String>(String.class);
		String[] arr = maker.create(9);
		// 打印结果
		// [null, null, null, null, null, null, null, null, null]
		System.out.println(Arrays.toString(arr));
	}
}
